#!/usr/bin/env node

import { execSync } from 'child_process'
import fs from 'fs'
import path from 'path'

console.log('🔍 诊断 Git Hooks 配置\n')
console.log('='.repeat(50))

// 1. 检查 Git hooks 路径配置
console.log('\n1️⃣  检查 Git hooks 路径配置')
try {
  const hooksPath = execSync('git config core.hooksPath', { encoding: 'utf-8' }).trim()
  if (hooksPath === '.husky') {
    console.log('   ✅ Git hooks 路径已设置: .husky')
  } else if (hooksPath) {
    console.log(`   ⚠️  Git hooks 路径设置为: ${hooksPath} (应该是 .husky)`)
  } else {
    console.log('   ❌ Git hooks 路径未设置')
  }
} catch (error) {
  console.log('   ❌ 无法读取 Git 配置')
}

// 2. 检查 .husky 目录和文件
console.log('\n2️⃣  检查 .husky 目录和文件')
const huskyDir = '.husky'
if (fs.existsSync(huskyDir)) {
  console.log('   ✅ .husky 目录存在')

  const files = fs.readdirSync(huskyDir)
  console.log(`   📁 文件列表: ${files.join(', ')}`)

  // 检查 pre-commit
  if (fs.existsSync(path.join(huskyDir, 'pre-commit'))) {
    console.log('   ✅ pre-commit 文件存在')
    const content = fs.readFileSync(path.join(huskyDir, 'pre-commit'), 'utf-8')
    console.log(`   📄 内容长度: ${content.length} 字节`)
    console.log(`   📝 前 50 字符: ${content.substring(0, 50)}...`)
  } else {
    console.log('   ❌ pre-commit 文件不存在')
  }
} else {
  console.log('   ❌ .husky 目录不存在')
}

// 3. 检查 package.json 配置
console.log('\n3️⃣  检查 package.json 配置')
try {
  const pkg = JSON.parse(fs.readFileSync('package.json', 'utf-8'))

  if (pkg['lint-staged']) {
    console.log('   ✅ lint-staged 配置存在')
  } else {
    console.log('   ❌ lint-staged 配置不存在')
  }

  if (pkg.scripts && pkg.scripts.prepare) {
    console.log(`   ✅ prepare 脚本: ${pkg.scripts.prepare}`)
  } else {
    console.log('   ⚠️  prepare 脚本未配置')
  }
} catch (error) {
  console.log('   ❌ 无法读取 package.json')
}

// 4. 测试手动运行 lint-staged
console.log('\n4️⃣  测试 lint-staged 命令')
try {
  console.log('   尝试运行: npx lint-staged --version')
  const version = execSync('npx lint-staged --version', { encoding: 'utf-8' }).trim()
  console.log(`   ✅ lint-staged 版本: ${version}`)
} catch (error) {
  console.log('   ❌ lint-staged 无法运行')
}

// 5. 修复建议
console.log('\n' + '='.repeat(50))
console.log('\n💡 修复建议:\n')
console.log('如果 Git hooks 路径已设置但仍不工作，可能是因为：')
console.log('1. 文件权限问题（在 Git Bash 中运行）：')
console.log('   chmod +x .husky/pre-commit')
console.log('   chmod +x .husky/commit-msg')
console.log('')
console.log('2. 尝试手动测试 hook：')
console.log('   bash .husky/pre-commit')
console.log('')
console.log('3. 如果上面命令报错，可能需要重新创建 hooks')
console.log('')

